//
//  UITextVIew + Extension.swift
//  表情键盘
//
//  Created by mac on 15/9/18.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

extension UITextView{
    
    var emoticonText: String{
        //attributedText 记录文本内容
      
        let attrText = attributedText
        //创建一个可变字符串
        var strM = String()
        
        attrText.enumerateAttributesInRange(NSRange(location: 0, length: attrText.length), options: []){
            (dict, range,_) -> Void in
            //如果字典中包含NSArrachment Key就说明是图片
            //新的问题，如何从attachment 中获取表情文字‘[不好意思]’
            if let attachment = dict["NSAttachment"] as? EmoticonAttachment{
                print("表情图片\(attachment.chs)")
                
                strM += attachment.chs
            }else{
                
                //一定要转换成为oc的字符串
                let str = (attrText.string as NSString).substringWithRange(range)
               // print("文本内容\(str)")
                strM += str
            }
            
        }
      //  print("\(strM)")
        return strM
    }
    
    func insertEmoticon(emoticon:Emoticon){
        
        //0，空表情
        if emoticon.isEmpty{
            return
        }
        
        //1.删除按钮
        if emoticon.isRemove{
            //删除相应文本编辑的按钮
            deleteBackward()
            return
        }
        
        //2,emoji
        if emoticon.emoji != nil{
            replaceRange(selectedTextRange!, withText: emoticon.emoji!)
            return
        }
        
        //3,表情图片，一定有图片
        let imageText = EmoticonAttachment.emoticonAttributeText(emoticon, font: font!)
             //1> 从textView中取出文本
        let strM = NSMutableAttributedString(attributedString: attributedText)
        
        //2> 插入图片文字
        strM.replaceCharactersInRange(selectedRange, withAttributedString: imageText)
        
        //3> 重新设置 textView的内容
        //1)记录当前光标的位置
        let range = selectedRange
        //2）设置内容
        attributedText = strM
        //3) 恢复光标位置
        // selectedTextRange = NSRange(location: range.location + 1, length: 0)
        selectedRange = NSRange(location: range.location + 1, length: 0)
        //4）执行代理方法，就是在需要的时候，通过代理执行 协议方法
        //协议之所以要强行解包，是因为协议方法是可选的，!表示代理一定要实现协议方法
        delegate?.textViewDidChange!(self)
        
    }
}
